谷歌TensorFlow物理检测API,目前最好的物体识别方案?
用大数据干大事!
目前有很多种图像识别的方案,而 Google 近日最近发布了其最新的 Tensorflow 物理检测接口(Object Detection API),使计算机视觉无处不在。Google 的产品通常都是黑科技,所以笔者决定尝试一下这个新的 API,并用 YouTube 上的一个视频来进行检测。如下:
完整的代码可以在我的 Github 上找到:https://github.com/priya-dwivedi/Deep-Learning/blob/master/Object_Detection_Tensorflow_API.ipynb。
所以,它的的体验到底如何?让我们先从理解 API 开始。
了解 API
此 API 经过 COCO 数据库训练。COCO 数据库拥有三十万张包括九十大类的图像集合,一部分类别如下:
API 提供了五种不同的模式来在识别速度与准确率中进行协调,详情见下表:
使用 API
我决定使用最轻量化的模块(ssd_mobilenet)。主要步骤如下:
下载冻结模型(.pb——protobuf)并将其导入内存;
使用內建代码来导入标签,分类,可视化效果工具等等;
打开一个新的会话并在一个图像上运行模型。
这是一个相对来说较为简单的步骤。API 介绍里也提供了关于如何进行相关步骤的指导。
此模型在样本图像上的表现不错(详见下图):
运行视频
接下来,用视频来测试此 API。此操作通过 Python moviepy 库来实现。主要步骤如下:
使用 VedioFileClip 方法从视频中提取图像;
fl_image 方法可以快速从视频中抽取并替代图片。使用此方法来将视频的每一帧提取出来;
将处理后的每帧图片合并为一个新的图像。
此段代码需要一定的时间(3-4秒的剪辑需要1分钟左右)。但是由于使用的是一个加载到内存的冻结模型,所以这些都可以在没有显卡的计算机上完成。
结果很惊人!只需要一小段代码,就可以准确识别并标记视屏中的人物。
在有些情况下它的功能还有待提升。比如在下图中,它并不能识别出视屏中的鸭子。
下一步
关于此 API 以后的想法:
使用更精确但抽象的模型来看看结果会如何;
优化识别速度,使其可以在移动设备上使用;
Google 还提供使用这些模型进行转移学习的能力,即加载冻结模型,并添加具有不同图像类别的另一个输出图层。
参考
Google Tensorflow Object Detection Github:
https://github.com/tensorflow/models/tree/master/object_detection
COCO dataset:
http://mscoco.org/home/
原文:Is Google Tensorflow Object Detection API the easiest way to implement image recognition?
作者:Priya Dwivedi
译者:聂震坤
审校:屠敏